package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectDemo6 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        //Person p = new Person();
        //p.heihei(); 编译不通过，不能访问私有方法

        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        /*
          Class的方法:
          Method getMethod()
          Method[] getMethods()
          上述两个方法只能用于获取Class所表示的类的公开方法(包含从超类继承的)

          Method getDeclaredMethod()
          Method[] getDeclaredMethods()
          上述两个方法可以获取Class所表示的类中自己定义的方法包含私有的，不包含从超类继承的方法
         */
        Method method = cls.getDeclaredMethod("heihei");
        method.setAccessible(true);//强行打开私有方法访问权限
        method.invoke(obj);
    }
}
